<!DOCTYPE html>
<html lang="en-us">
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    
<meta charset="UTF-8">
<title>Numeric datatypes | Elasticsearch Guide [7.7] | Elastic</title>
<link rel="home" href="index.html" title="Elasticsearch Guide [7.7]">
<link rel="up" href="mapping-types.html" title="Field datatypes">
<link rel="prev" href="nested.html" title="Nested datatype">
<link rel="next" href="object.html" title="Object datatype">
<meta name="DC.type" content="Learn/Docs/Elasticsearch/Reference/7.7">
<meta name="DC.subject" content="Elasticsearch">
<meta name="DC.identifier" content="7.7">
<meta name="robots" content="noindex,nofollow">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://cdn.optimizely.com/js/18132920325.js"></script>
    <link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
    <link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
    <link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
    <link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
    <link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
    <link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
    <link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
    <link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
    <link rel="icon" type="image/png" href="/android-chrome-192x192.png" sizes="192x192">
    <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
    <link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
    <link rel="manifest" href="/manifest.json">
    <meta name="apple-mobile-web-app-title" content="Elastic">
    <meta name="application-name" content="Elastic">
    <meta name="msapplication-TileColor" content="#ffffff">
    <meta name="msapplication-TileImage" content="/mstile-144x144.png">
    <meta name="theme-color" content="#ffffff">
    <meta name="naver-site-verification" content="936882c1853b701b3cef3721758d80535413dbfd">
    <meta name="yandex-verification" content="d8a47e95d0972434">
    <meta name="localized" content="true">
    <meta name="st:robots" content="follow,index">
    <meta property="og:image" content="https://www.elastic.co/static/images/elastic-logo-200.png">
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
    <link rel="icon" href="/favicon.ico" type="image/x-icon">
    <link rel="apple-touch-icon-precomposed" sizes="64x64" href="/favicon_64x64_16bit.png">
    <link rel="apple-touch-icon-precomposed" sizes="32x32" href="/favicon_32x32.png">
    <link rel="apple-touch-icon-precomposed" sizes="16x16" href="/favicon_16x16.png">
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <link rel="stylesheet" type="text/css" href="/guide/static/styles.css">
  </head>

  <!--© 2015-2021 Elasticsearch B.V. Copying, publishing and/or distributing without written permission is strictly prohibited.-->

  <body>
    <!-- Google Tag Manager -->
    <script>dataLayer = [];</script><noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-58RLH5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-58RLH5');</script>
    <!-- End Google Tag Manager -->

    <!-- Global site tag (gtag.js) - Google Analytics -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=UA-12395217-16"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', 'UA-12395217-16');
    </script>

    <!--BEGIN QUALTRICS WEBSITE FEEDBACK SNIPPET-->
    <script type="text/javascript">
      (function(){var g=function(e,h,f,g){
      this.get=function(a){for(var a=a+"=",c=document.cookie.split(";"),b=0,e=c.length;b<e;b++){for(var d=c[b];" "==d.charAt(0);)d=d.substring(1,d.length);if(0==d.indexOf(a))return d.substring(a.length,d.length)}return null};
      this.set=function(a,c){var b="",b=new Date;b.setTime(b.getTime()+6048E5);b="; expires="+b.toGMTString();document.cookie=a+"="+c+b+"; path=/; "};
      this.check=function(){var a=this.get(f);if(a)a=a.split(":");else if(100!=e)"v"==h&&(e=Math.random()>=e/100?0:100),a=[h,e,0],this.set(f,a.join(":"));else return!0;var c=a[1];if(100==c)return!0;switch(a[0]){case "v":return!1;case "r":return c=a[2]%Math.floor(100/c),a[2]++,this.set(f,a.join(":")),!c}return!0};
      this.go=function(){if(this.check()){var a=document.createElement("script");a.type="text/javascript";a.src=g;document.body&&document.body.appendChild(a)}};
      this.start=function(){var a=this;window.addEventListener?window.addEventListener("load",function(){a.go()},!1):window.attachEvent&&window.attachEvent("onload",function(){a.go()})}};
      try{(new g(100,"r","QSI_S_ZN_emkP0oSe9Qrn7kF","https://znemkp0ose9qrn7kf-elastic.siteintercept.qualtrics.com/WRSiteInterceptEngine/?Q_ZID=ZN_emkP0oSe9Qrn7kF")).start()}catch(i){}})();
    </script><div id="ZN_emkP0oSe9Qrn7kF"><!--DO NOT REMOVE-CONTENTS PLACED HERE--></div>
    <!--END WEBSITE FEEDBACK SNIPPET-->

    <div id="elastic-nav" style="display:none;"></div>
    <script src="https://www.elastic.co/elastic-nav.js"></script>

    <!-- Subnav -->
    <div>
      <div>
        <div class="tertiary-nav d-none d-md-block">
          <div class="container">
            <div class="p-t-b-15 d-flex justify-content-between nav-container">
              <div class="breadcrum-wrapper"><span><a href="/guide/" style="font-size: 14px; font-weight: 600; color: #000;">Docs</a></span></div>
            </div>
          </div>
        </div>
      </div>
    </div>

    <div class="main-container">
      <section id="content">
        <div class="content-wrapper">

          <section id="guide" lang="en">
            <div class="container">
              <div class="row">
                <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                  <!-- start body -->
                  <div class="page_header">
<strong>IMPORTANT</strong>: No additional bug fixes or documentation updates
will be released for this version. For the latest information, see the
<a href="../current/index.html">current release documentation</a>.
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch Guide [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="mapping.html">Mapping</a></span>
»
<span class="breadcrumb-link"><a href="mapping-types.html">Field datatypes</a></span>
»
<span class="breadcrumb-node">Numeric datatypes</span>
</div>
<div class="navheader">
<span class="prev">
<a href="nested.html">« Nested datatype</a>
</span>
<span class="next">
<a href="object.html">Object datatype »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="number"></a>Numeric datatypes<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/numeric.asciidoc">edit</a>
</h2>
</div></div></div>

<p>The following numeric types are supported:</p>
<div class="informaltable">
<table border="0" cellpadding="4px">
<colgroup>
<col>
<col>
</colgroup>
<tbody valign="top">
<tr>
<td valign="top">
<p>
<code class="literal">long</code>
</p>
</td>
<td valign="top">
<p>
A signed 64-bit integer with a minimum value of <code class="literal">-2<sup>63</sup></code> and a maximum value of <code class="literal">2<sup>63</sup>-1</code>.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<code class="literal">integer</code>
</p>
</td>
<td valign="top">
<p>
A signed 32-bit integer with a minimum value of <code class="literal">-2<sup>31</sup></code> and a maximum value of <code class="literal">2<sup>31</sup>-1</code>.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<code class="literal">short</code>
</p>
</td>
<td valign="top">
<p>
A signed 16-bit integer with a minimum value of <code class="literal">-32,768</code> and a maximum value of <code class="literal">32,767</code>.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<code class="literal">byte</code>
</p>
</td>
<td valign="top">
<p>
A signed 8-bit integer with a minimum value of <code class="literal">-128</code> and a maximum value of <code class="literal">127</code>.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<code class="literal">double</code>
</p>
</td>
<td valign="top">
<p>
A double-precision 64-bit IEEE 754 floating point number, restricted to finite values.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<code class="literal">float</code>
</p>
</td>
<td valign="top">
<p>
A single-precision 32-bit IEEE 754 floating point number, restricted to finite values.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<code class="literal">half_float</code>
</p>
</td>
<td valign="top">
<p>
A half-precision 16-bit IEEE 754 floating point number, restricted to finite values.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<code class="literal">scaled_float</code>
</p>
</td>
<td valign="top">
<p>
A floating point number that is backed by a <code class="literal">long</code>, scaled by a fixed <code class="literal">double</code> scaling factor.
</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>Below is an example of configuring a mapping with numeric fields:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT my_index
{
  "mappings": {
    "properties": {
      "number_of_bytes": {
        "type": "integer"
      },
      "time_in_seconds": {
        "type": "float"
      },
      "price": {
        "type": "scaled_float",
        "scaling_factor": 100
      }
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/674.console"></div>
<div class="note admon">
<div class="icon"></div>
<div class="admon_content">
<p>The <code class="literal">double</code>, <code class="literal">float</code> and <code class="literal">half_float</code> types consider that <code class="literal">-0.0</code> and
<code class="literal">+0.0</code> are different values. As a consequence, doing a <code class="literal">term</code> query on
<code class="literal">-0.0</code> will not match <code class="literal">+0.0</code> and vice-versa. Same is true for range queries:
if the upper bound is <code class="literal">-0.0</code> then <code class="literal">+0.0</code> will not match, and if the lower
bound is <code class="literal">+0.0</code> then <code class="literal">-0.0</code> will not match.</p>
</div>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_which_type_should_i_use"></a>Which type should I use?<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/numeric.asciidoc">edit</a>
</h3>
</div></div></div>
<p>As far as integer types (<code class="literal">byte</code>, <code class="literal">short</code>, <code class="literal">integer</code> and <code class="literal">long</code>) are concerned,
you should pick the smallest type which is enough for your use-case. This will
help indexing and searching be more efficient. Note however that storage is
optimized based on the actual values that are stored, so picking one type over
another one will have no impact on storage requirements.</p>
<p>For floating-point types, it is often more efficient to store floating-point
data into an integer using a scaling factor, which is what the <code class="literal">scaled_float</code>
type does under the hood. For instance, a <code class="literal">price</code> field could be stored in a
<code class="literal">scaled_float</code> with a <code class="literal">scaling_factor</code> of <code class="literal">100</code>. All APIs would work as if
the field was stored as a double, but under the hood Elasticsearch would be
working with the number of cents, <code class="literal">price*100</code>, which is an integer. This is
mostly helpful to save disk space since integers are way easier to compress
than floating points. <code class="literal">scaled_float</code> is also fine to use in order to trade
accuracy for disk space. For instance imagine that you are tracking cpu
utilization as a number between <code class="literal">0</code> and <code class="literal">1</code>. It usually does not matter much
whether cpu utilization is <code class="literal">12.7%</code> or <code class="literal">13%</code>, so you could use a <code class="literal">scaled_float</code>
with a <code class="literal">scaling_factor</code> of <code class="literal">100</code> in order to round cpu utilization to the
closest percent in order to save space.</p>
<p>If <code class="literal">scaled_float</code> is not a good fit, then you should pick the smallest type
that is enough for the use-case among the floating-point types: <code class="literal">double</code>,
<code class="literal">float</code> and <code class="literal">half_float</code>. Here is a table that compares these types in order
to help make a decision.</p>
<div class="informaltable">
<table border="1" cellpadding="4px">
<colgroup>
<col class="col_1">
<col class="col_2">
<col class="col_3">
<col class="col_4">
</colgroup>
<thead>
<tr>
<th align="left" valign="top">Type</th>
<th align="left" valign="top">Minimum value</th>
<th align="left" valign="top">Maximum value</th>
<th align="left" valign="top">Significant bits / digits</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" valign="top"><p><code class="literal">double</code></p></td>
<td align="left" valign="top"><p><code class="literal">2<sup>-1074</sup></code></p></td>
<td align="left" valign="top"><p><code class="literal">(2-2<sup>-52</sup>)·2<sup>1023</sup></code></p></td>
<td align="left" valign="top"><p><code class="literal">53</code> / <code class="literal">15.95</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">float</code></p></td>
<td align="left" valign="top"><p><code class="literal">2<sup>-149</sup></code></p></td>
<td align="left" valign="top"><p><code class="literal">(2-2<sup>-23</sup>)·2<sup>127</sup></code></p></td>
<td align="left" valign="top"><p><code class="literal">24</code> / <code class="literal">7.22</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">half_float</code></p></td>
<td align="left" valign="top"><p><code class="literal">2<sup>-24</sup></code></p></td>
<td align="left" valign="top"><p><code class="literal">65504</code></p></td>
<td align="left" valign="top"><p><code class="literal">11</code> / <code class="literal">3.31</code></p></td>
</tr>
</tbody>
</table>
</div>
<div class="tip admon">
<div class="icon"></div>
<div class="admon_content">
<h3>Mapping numeric identifiers</h3>
<p>Not all numeric data should be mapped as a <a class="xref" href="number.html" title="Numeric datatypes">numeric</a> field datatype.
Elasticsearch optimizes numeric fields, such as <code class="literal">integer</code> or <code class="literal">long</code>, for
<a class="xref" href="query-dsl-range-query.html" title="Range query"><code class="literal">range</code></a> queries. However, <a class="xref" href="keyword.html" title="Keyword datatype"><code class="literal">keyword</code></a> fields
are better for <a class="xref" href="query-dsl-term-query.html" title="Term query"><code class="literal">term</code></a> and other
<a class="xref" href="term-level-queries.html" title="Term-level queries">term-level</a> queries.</p>
<p>Identifiers, such as an ISBN or a product ID, are rarely used in <code class="literal">range</code>
queries. However, they are often retrieved using term-level queries.</p>
<p>Consider mapping a numeric identifier as a <code class="literal">keyword</code> if:</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
You don’t plan to search for the identifier data using
<a class="xref" href="query-dsl-range-query.html" title="Range query"><code class="literal">range</code></a> queries.
</li>
<li class="listitem">
Fast retrieval is important. <code class="literal">term</code> query searches on <code class="literal">keyword</code> fields are
often faster than <code class="literal">term</code> searches on numeric fields.
</li>
</ul>
</div>
<p>If you’re unsure which to use, you can use a <a class="xref" href="multi-fields.html" title="fields">multi-field</a> to map
the data as both a <code class="literal">keyword</code> <em>and</em> a numeric datatype.</p>
</div>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="number-params"></a>Parameters for numeric fields<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/numeric.asciidoc">edit</a>
</h3>
</div></div></div>
<p>The following parameters are accepted by numeric types:</p>
<div class="informaltable">
<table border="0" cellpadding="4px">
<colgroup>
<col>
<col>
</colgroup>
<tbody valign="top">
<tr>
<td valign="top">
<p>
<a class="xref" href="coerce.html" title="coerce"><code class="literal">coerce</code></a>
</p>
</td>
<td valign="top">
<p>
Try to convert strings to numbers and truncate fractions for integers.
Accepts <code class="literal">true</code> (default) and <code class="literal">false</code>.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="mapping-boost.html" title="boost"><code class="literal">boost</code></a>
</p>
</td>
<td valign="top">
<p>
Mapping field-level query time boosting. Accepts a floating point number, defaults
to <code class="literal">1.0</code>.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="doc-values.html" title="doc_values"><code class="literal">doc_values</code></a>
</p>
</td>
<td valign="top">
<p>
Should the field be stored on disk in a column-stride fashion, so that it
can later be used for sorting, aggregations, or scripting? Accepts <code class="literal">true</code>
(default) or <code class="literal">false</code>.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="ignore-malformed.html" title="ignore_malformed"><code class="literal">ignore_malformed</code></a>
</p>
</td>
<td valign="top">
<p>
If <code class="literal">true</code>, malformed numbers are ignored. If <code class="literal">false</code> (default), malformed
numbers throw an exception and reject the whole document.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="mapping-index.html" title="index"><code class="literal">index</code></a>
</p>
</td>
<td valign="top">
<p>
Should the field be searchable? Accepts <code class="literal">true</code> (default) and <code class="literal">false</code>.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="null-value.html" title="null_value"><code class="literal">null_value</code></a>
</p>
</td>
<td valign="top">
<p>
Accepts a numeric value of the same <code class="literal">type</code> as the field which is
substituted for any explicit <code class="literal">null</code> values.  Defaults to <code class="literal">null</code>, which
means the field is treated as missing.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="mapping-store.html" title="store"><code class="literal">store</code></a>
</p>
</td>
<td valign="top">
<p>
Whether the field value should be stored and retrievable separately from
the <a class="xref" href="mapping-source-field.html" title="_source field"><code class="literal">_source</code></a> field. Accepts <code class="literal">true</code> or <code class="literal">false</code>
(default).
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="mapping-field-meta.html" title="meta"><code class="literal">meta</code></a>
</p>
</td>
<td valign="top">
<p>
Metadata about the field.
</p>
</td>
</tr>
</tbody>
</table>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="scaled-float-params"></a>Parameters for <code class="literal">scaled_float</code><a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/numeric.asciidoc">edit</a>
</h3>
</div></div></div>
<p><code class="literal">scaled_float</code> accepts an additional parameter:</p>
<div class="informaltable">
<table border="0" cellpadding="4px">
<colgroup>
<col>
<col>
</colgroup>
<tbody valign="top">
<tr>
<td valign="top">
<p>
<code class="literal">scaling_factor</code>
</p>
</td>
<td valign="top">
<p>
The scaling factor to use when encoding values. Values will be multiplied
by this factor at index time and rounded to the closest long value. For
instance, a <code class="literal">scaled_float</code> with a <code class="literal">scaling_factor</code> of <code class="literal">10</code> would internally
store <code class="literal">2.34</code> as <code class="literal">23</code> and all search-time operations (queries, aggregations,
sorting) will behave as if the document had a value of <code class="literal">2.3</code>. High values
of <code class="literal">scaling_factor</code> improve accuracy but also increase space requirements.
This parameter is required.
</p>
</td>
</tr>
</tbody>
</table>
</div>
</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="nested.html">« Nested datatype</a>
</span>
<span class="next">
<a href="object.html">Object datatype »</a>
</span>
</div>
</div>

                  <!-- end body -->
                </div>
                <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                  <div id="rtpcontainer" style="display: block;">
                    <div class="mktg-promo">
                      <h3>Most Popular</h3>
                      <ul class="icons">
                        <li class="icon-elasticsearch-white"><a href="https://www.elastic.co/webinars/getting-started-elasticsearch?baymax=default&amp;elektra=docs&amp;storm=top-video">Get Started with Elasticsearch: Video</a></li>
                        <li class="icon-kibana-white"><a href="https://www.elastic.co/webinars/getting-started-kibana?baymax=default&amp;elektra=docs&amp;storm=top-video">Intro to Kibana: Video</a></li>
                        <li class="icon-logstash-white"><a href="https://www.elastic.co/webinars/introduction-elk-stack?baymax=default&amp;elektra=docs&amp;storm=top-video">ELK for Logs &amp; Metrics: Video</a></li>
                      </ul>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </section>

        </div>


<div id="elastic-footer"></div>
<script src="https://www.elastic.co/elastic-footer.js"></script>
<!-- Footer Section end-->

      </section>
    </div>

<script src="/guide/static/jquery.js"></script>
<script type="text/javascript" src="/guide/static/docs.js"></script>
<script type="text/javascript">
  window.initial_state = {}</script>
  </body>
</html>
